package com.gtw.memento.clone;

/**
 * 通过clone方式,自我实现备忘录功能
 * 注意:
 *      使用在比较简单的场景中,尽量不要与其他对象产生严重的耦合
 */
public class CloneOriginator implements Cloneable{

    private CloneOriginator backup;

    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    /**
     * 利用clone的方式创建备忘录,产生一个备份对象
     */
    public void createMementor(){
        this.backup = this.clone();
    }

    //恢复备忘录
    public void restoreMementor(){
        //进行恢复前应该进行断言,防止空指针
        this.setState(this.backup.state);
    }

    @Override
    protected CloneOriginator clone() {
        try {
            return (CloneOriginator) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }
}
